package gm.server.virtual.simulator2D;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
import org.imgscalr.Scalr;

public class ImagePane extends JPanel {

    /**
     * Kép.
     */
    private BufferedImage background = null;
    /**
     * Kép pozíciója.
     */
    private final Point pos = new Point();

    /**
     * Kirajzolandó kép megadása.
     *
     * @param image kép
     * @param repaint igaz esetén a komponens újrarajzolódik
     */
    public void setDrawImage(BufferedImage image, boolean repaint) {
        Dimension size = super.getSize();
        this.background = Scalr.resize(
                image, Scalr.Method.ULTRA_QUALITY,
                ((double) size.width / (double) size.height) < ((double) image.getWidth() / (double) image.getHeight()) ? Scalr.Mode.FIT_TO_WIDTH : Scalr.Mode.FIT_TO_HEIGHT,
                size.width,
                size.height,
                Scalr.OP_ANTIALIAS);

        // Komponens újrarajzolása ha szükséges.
        if (repaint) {
            this.repaint();
        }
    }

    @Override
    public Dimension getPreferredSize() {
        return background == null ? super.getPreferredSize() : new Dimension(background.getWidth(), background.getHeight());
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (background != null) {
            pos.x = (getWidth() - background.getWidth()) / 2;
            pos.y = (getHeight() - background.getHeight()) / 2;
            g.drawImage(background, pos.x, pos.y, this);
        }
    }

    /**
     * Kép téglalapjának a lekérdezése.
     *
     * @return kép téglalapja
     */
    public Rectangle getImageRectangle() {
        return new Rectangle(new Point(pos.x, pos.y), new Dimension(getPreferredSize().width, getPreferredSize().height));
    }

    /**
     * Kép lekérdezése.
     *
     * @return kép
     */
    public BufferedImage getImage() {
        return this.background;
    }
}
